package pfc.aviloc.aplicacion.enfermedades;

import java.util.ArrayList;

import pfc.aviloc.R;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class EnfermedadesBD extends SQLiteOpenHelper {

	//Sentencia SQL para crear la tabla de Enfermedades
    //String sqlCreate = "CREATE TABLE enfermedades(codigo INTEGER, nombre TEXT)";
    Context context;
    
	public EnfermedadesBD(Context context, String name, CursorFactory factory, int version) {
		super(context, name, factory, version);
		this.context = context;
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		String sqlCreate = recuperarSentenciaCreate();
		db.execSQL(sqlCreate);
	}
	
	private String recuperarSentenciaCreate() {
		String sqlCreate = "CREATE TABLE "+ context.getString(R.string.e_bd_nombre_tabla_lista_enfermedades) +" ("+
							context.getString(R.string.e_bd_campo_id_enfermedad ) +" TEXT, " +
							context.getString(R.string.e_bd_campo_nombre) + " TEXT, " +
							context.getString(R.string.e_bd_campo_descripcion) +" TEXT, " +
							context.getString(R.string.e_bd_campo_fecha_inicio) +" TEXT, " +
							context.getString(R.string.e_bd_campo_fecha_fin) +" TEXT, " +							
							context.getString(R.string.e_bd_campo_fecha_inicio_dia) +" INTEGER, " +
							context.getString(R.string.e_bd_campo_fecha_inicio_mes) +" INTEGER, " +
							context.getString(R.string.e_bd_campo_fecha_inicio_ano) +" INTEGER, " +
							context.getString(R.string.e_bd_campo_fecha_fin_dia) +" INTEGER, " +							
							context.getString(R.string.e_bd_campo_fecha_fin_mes) +" INTEGER, " +							
							context.getString(R.string.e_bd_campo_fecha_fin_ano) +" INTEGER, " +							
							context.getString(R.string.e_bd_campo_fecha_actualizacion) +" TEXT )";
						
//		//Log.i("INFO","<33333333333333333333<<<<<<<< sqlCreate = "+sqlCreate);
		return sqlCreate;
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //Se elimina la version anterior de la tabla
		String sqlDrop = "DROP TABLE IF EXISTS "+context.getString(R.string.e_bd_nombre_tabla_lista_enfermedades);
        db.execSQL(sqlDrop);
        
        //Se crea la nueva version de la tabla
		String sqlCreate = recuperarSentenciaCreate();
		db.execSQL(sqlCreate);		
	}
	
	public boolean insertarBD(Enfermedades e) {
		SQLiteDatabase db = this.getWritableDatabase();
		// Si hemos abierto correctamente la base de datos
		if (db != null) {
			try{
				//Recuperamos los datos a almacenar en el ContentValues
				ContentValues registroEnfermedad = e.getContentValues(context);
				//Log.i("INFO","<<<<<<<<<<<<<<<<<<contentvalue>>>>>>>>>>>>>>>>>>>>>>registroCitaMedico="+registroCitaMedico);
				//String fecha = (new Date()).toLocaleString();
				////Log.i("INFO","<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>fecha="+fecha);
				//registroDatosPersonales.put(context.getString(R.string.dp_bd_campo_fecha_actualizacion), fecha);
				int respDelete = db.delete(context.getString(R.string.e_bd_nombre_tabla_lista_enfermedades), context.getString(R.string.e_bd_campo_id_enfermedad)+"=?", new String[] {e.getIdEnfermedad()});
				//int respDelete = db.delete(context.getString(R.string.cm_bd_nombre_tabla_lista_citas_medico), context.getString(R.string.cm_bd_campo_id_cita)+"=?", new String[] {cm.getId()});
				//Log.i("INFO","<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>> respDelete="+respDelete);
				//Insertamos el registro en la base de datos
				//ContentValues aa = new ContentValues();
				//aa.put("idusuario","1");
				//aa.put("nombre", "ALbert");
				long respInsert = db.insert(context.getString(R.string.e_bd_nombre_tabla_lista_enfermedades), null, registroEnfermedad);
				//Log.i("INFO","<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>> respInsert="+respInsert);
				// Cerramos la base de datos
				db.close();
				if (respInsert<0){
					return false;
				}
			} catch (Exception ex) {
				// TODO: handle exception
				ex.printStackTrace();
				return false;
			}
			return true;
		} else {
			return false;
		}
	}

	public ArrayList<Enfermedades> recuperarBD(){
		//Log.i("INFO","<<<<<<<<<-1-");
		Enfermedades enfermedad = null;
		ArrayList<Enfermedades> listaEnfermedades = null;
		
		//Log.i("INFO","<<<<<<<<<-2-");
		SQLiteDatabase db = this.getWritableDatabase();
		//Log.i("INFO","<<<<<<<<<-3-");
		// Si hemos abierto correctamente la base de datos
		if (db != null) {
			//Log.i("INFO","<<<<<<<<<-4-");
			//db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);
//            Calendar cal = new GregorianCalendar();
//            cal.setTimeInMillis((new Date()).getTime());
//            cal.add(Calendar.DATE,-1);
//            Date fechaAyer = new Date(cal.getTimeInMillis());
			//Date fechaActual = new Date();
			//Log.i("INFO","<<<<<<<<<-5-");
//			String fechaDia = ""+fechaAyer.getDate();
//			String fechaMes = ""+(fechaAyer.getMonth()+1);
//			String fechaAno = ""+(fechaAyer.getYear()+1900);
//			  
//			Log.i("INFO","<<<<<<<<<-6-"+fechaDia);
//			String nameColumnAno = context.getString(R.string.cm_bd_campo_fecha_ano);
//			String nameColumnMes = context.getString(R.string.cm_bd_campo_fecha_mes);
//			String nameColumnDia = context.getString(R.string.cm_bd_campo_fecha_dia);
			//Log.i("INFO","<<<<<<<<<-7-");
			//String condicionWhereFecha = "("+ nameColumnAno +">? ) OR ( "+ nameColumnAno +">=? AND "+nameColumnMes+">? ) OR ( "+ nameColumnAno +">=? AND "+ nameColumnMes +">=? AND "+ nameColumnDia +">=?)";
			//Log.i("INFO","<<<<<<<<<-8-");
			//Cursor c = db.query(context.getString(R.string.e_bd_nombre_tabla_lista_enfermedades), null, condicionWhereFecha, new String[] {fechaAno, fechaAno, fechaMes, fechaAno, fechaMes, fechaDia}, null, null,  nameColumnAno + ", " +nameColumnMes + ", " + nameColumnDia);// + ", "+ nameColumnAno + " ASC, "+ nameColumnMes );//+ " ASC, "+ nameColumnDia + "ASC");
			Cursor c = db.query(context.getString(R.string.e_bd_nombre_tabla_lista_enfermedades), null, null, null, null, null, context.getString(R.string.e_bd_campo_fecha_fin));// + ", "+ nameColumnAno + " ASC, "+ nameColumnMes );//+ " ASC, "+ nameColumnDia + "ASC");
			//Log.i("INFO","<<<<<<<<<-9-");
			if ( (c != null) && (c.moveToFirst()) ) {
				//Log.i("INFO","<<<<<<<<<-10-");
				int numColumnas = c.getColumnCount();
				//Log.i("INFO","<<<<<<<<<-11-");
				listaEnfermedades = new ArrayList<Enfermedades>();
				do {					
					//Log.i("INFO","<<<<<<<<<-12-");
					ContentValues datosContentValues = new ContentValues();
					for (int i = 0 ; i < numColumnas ; i++) {
						String columna = c.getColumnName(i);
						String valor = c.getString(i);
						datosContentValues.put(columna, valor);					
					}	
					enfermedad = new Enfermedades(datosContentValues, context);
					//Log.i("INFO","<<<<<<<<<-12AA-"+citaMedico);
					listaEnfermedades.add(enfermedad);
				} while (c.moveToNext());
			}
			//Log.i("INFO","<<<<<<<<<-13-"+listaCitas);
			if ((c != null) && (!c.isClosed())){
				//Log.i("INFO","<<<<<<<<<-14-");
				c.close();
			}			
		}
		//Log.i("INFO","<<<<<<<<<-15-");
		return listaEnfermedades;	
	}
	
	public Enfermedades recuperarBD(String id){
		Enfermedades datosEnfermedad = null;
		SQLiteDatabase db = this.getWritableDatabase();
		// Si hemos abierto correctamente la base de datos
		if (db != null) {
			//db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);
			//Cursor c = db.query(context.getString(R.string.cm_bd_nombre_tabla_lista_citas_medico), null, context.getString(R.string.cm_bd_campo_id_cita)+"=?", new String[] {id}, null, null, null);
			Cursor c = db.query(context.getString(R.string.e_bd_nombre_tabla_lista_enfermedades), null, context.getString(R.string.e_bd_campo_id_enfermedad)+"=?", new String[] {id}, null, null, null);
			if ( (c != null) && (c.moveToFirst()) ) {
				int numColumnas = c.getColumnCount();
				ContentValues datosContentValues = new ContentValues();
				for (int i = 0 ; i < numColumnas ; i++) {
					String columna = c.getColumnName(i);
					String valor = c.getString(i);
					datosContentValues.put(columna, valor);					
				}
				datosEnfermedad = new Enfermedades(datosContentValues, context);
			}
		}
		return datosEnfermedad;
	}	
}